home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 089 - Misc Stuff - PD.dsk / PRINTFILER.S < prev    next >
Text File  |  2019-02-17  |  7KB  |  242 lines

  1. ********************************
  2. *                              *
  3. *          PRINTFILER          *
  4. *                              *
  5. *   Glen E. Bredon   9/11/82   *
  6. *                              *
  7. ********************************
  8. *                              *
  9. *  Version 1: This uses the    *
  10. *  $300 and the $8A0 space.    *
  11. *                              *
  12. ********************************
  13. *                              *
  14. * If FRMTFLAG ($300) contains  *
  15. * $80 then formatting spaces   *
  16. * are placed in the file.      *
  17. * If it has 0 then the spaces  *
  18. * are packed into a count      *
  19. * (sign bit off) instead.      *
  20. *                              *
  21. ********************************
  22. *                              *
  23. * If MONFLAG ($301) is $80     *
  24. * then output is also sent to  *
  25. * video.                       *
  26. *                              *
  27. ********************************
  28. *                              *
  29. * CAUTION: This is incompatible*
  30. * with the DSC psuedo-op; it is*
  31. * OK with PUT or SAV.          *
  32. *                              *
  33. ********************************
  34.  
  35. FORMAT    KBD            ; 1 = format, 0 = pack
  36.           ERR FORMAT/2   ;Require 0 or 1
  37. MONITOR   KBD            ; 1 to monitor, 0 don't
  38.           ERR MONITOR/2
  39.  
  40. CH        = $24
  41. CSWL      = $36
  42. DSKFLAG   = $B2          ;Minus if DSK active
  43. VIDVEC    = $C0          ;80 column address or COUT1
  44. JUST      = $EE
  45. LISTFLAG  = $D1
  46. STRINGS   = $860         ;Editor puts string here
  47. AMPER     = $3F5
  48. ERRCODE   = $B5C5
  49. CONNECT   = $A851
  50. BYTE      = $B5C3
  51. COUT      = $FDED
  52. CROUT     = $FD8E
  53. BASIC     = $E000
  54. DISWARM   = $E01B        ;Stable address
  55. FILEMGR   = $AB06
  56. OPCODE    = $B5BB        ;File mngr opcode
  57. SUBOP     = $B5BC        ; " subcode
  58. DOSERR    = $B66B
  59.  
  60. * Zero page usage by this program only
  61. * (to enable program to fit into available space):
  62.  
  63. CHSAVE    = $70          ;Horiz cursor save
  64. CHRCNT    = $71          ;Holds chr count/line
  65. SPACECNT  = $72          ;Accumulated spaces for pack
  66.  
  67. ********************************
  68.  
  69.           ORG $2A5
  70.  
  71.           LDA BASIC+2    ;Was it BRUN from Merlin?
  72.           EOR #$E0
  73.           BNE EXIT       ;Do nothing if not
  74.           LDY #BACK-INIT ;Move the $8A0 stuff
  75. MOVE      LDA CODE,Y
  76.           STA INIT,Y
  77.           DEY
  78.           BPL MOVE
  79.           LDA #$4C       ;Set up amper vector
  80.           STA AMPER
  81.           LDA #INIT
  82.           STA AMPER+1
  83.           LDA #>INIT
  84.           STA AMPER+2
  85. EXIT      RTS
  86.  
  87. * Make sure the code to be moved
  88. * fits exactly from here to $2FF:
  89.  
  90. CODE      ERR CODE+FILENAME-INIT-$300
  91.  
  92. ****************************************
  93. *
  94. * This code is moved to $8A0 upon a BRUN:
  95.  
  96.           ORG $8A0
  97.  
  98. INIT      LDA BASIC+2    ;Check that this comes
  99.           CMP #$E0       ; from MERLIN
  100.           BNE BACK       ;Exit if not
  101.           LDA STRINGS    ;String after USER?
  102.           BEQ BACK       ;Exit if not
  103.           LDY #-1        ;Save it
  104. MOVNAM    INY
  105.           LDA STRINGS,Y
  106.           STA FILENAME,Y
  107.           BNE MOVNAM     ;Ends with a 0
  108.           TAY
  109.           STY CHRCNT     ;Init character count
  110.           STY SPACECNT   ; and space count
  111.           JSR CONNECT    ;Preserves Y
  112.           JSR SENDMSG    ;Open the file
  113.           BNE DISCON     ;Branch if no params
  114. REST      JSR NEXT       ;Send params
  115.           BEQ REST       ;Loop till got CR
  116. DISCON    JSR DISWARM    ;Disconnect DOS
  117.           LDA #OUTPUT    ;Connect our outhook
  118.           STA CSWL
  119.           LDA #>OUTPUT
  120.           STA CSWL+1
  121.           LDA #" "       ;Usual value in editor
  122.           STA JUST
  123. BACK      RTS
  124. FILENAME  ERR *+$20/$900 ;File name needs 32 bytes
  125.  
  126. ********************************
  127.  
  128.           ORG $300
  129.  
  130. FRMTFLAG  DFB FORMAT*$80
  131. MONFLAG   DFB MONITOR*$80
  132.  
  133. GOVID     JMP (VIDVEC)
  134.  
  135. OUTPUT    BIT JUST       ;Assembling yet?
  136.           BMI GOVID      ;(This is + in ASM)
  137.           PHA            ;Save byte
  138.           LDA CH         ;Must protect CH from
  139.           STA CHSAVE     ;80 col card interference
  140.           PLA
  141.           PHA
  142.           BIT MONFLAG    ;Screen output requested?
  143.           BPL HORIZ      ;Branch if not
  144.           JSR GOVID
  145. HORIZ     INC CHRCNT
  146.           LDA CHSAVE
  147.           CMP CHRCNT     ;Support POKE 36
  148.           BLT PULL
  149.           INC SPACECNT
  150.           BNE HORIZ      ;Always taken
  151. PULL      PLA
  152.           CMP #" "       ;A space?
  153.           BEQ SPACE      ;Increase count if so
  154.           CMP #$8D       ;End of line?
  155.           BEQ SKIP       ;Forget spaces if so
  156.           PHA
  157. CHKSPCNT  LDA SPACECNT   ;Prepare to send space count
  158.           BEQ PULL2      ; if not zero
  159.           BIT FRMTFLAG   ;Formatting requested?
  160.           BPL NOFRMT     ;Branch to send count if not
  161.           LDA #" "
  162.           JSR SENDBYTE   ;Send formatting spaces
  163.           DEC SPACECNT   ; that were counted
  164.           BPL CHKSPCNT   ;Loop always
  165.  
  166. NOFRMT    JSR SENDBYTE   ;Send space count
  167.           LDA #0
  168.           STA SPACECNT   ; and reset it.
  169. PULL2     PLA            ;Retrieve chr
  170. SKIP      BIT LISTFLAG   ;If this - then
  171.           BMI ENDASM     ; assembly is over
  172. SENDBYTE  EOR #$8D       ;Is it a CR?
  173.           BNE XOR
  174.           STA CH         ;Zero cursor positions
  175.           STA CHRCNT
  176.           STA SPACECNT   ; and space count
  177. XOR       EOR #$8D       ;Get back chr
  178.           STA BYTE       ;Set up for file mngr
  179.           PHA
  180.           TXA
  181.           PHA
  182.           TYA
  183.           PHA
  184.           JSR OPERATE
  185.           PLA
  186.           TAY
  187.           PLA
  188.           TAX
  189.           PLA
  190.           RTS
  191.  
  192. SPACE     INC SPACECNT   ;Count ALL spaces
  193.           RTS            ; before acting on them.
  194.  
  195. ENDASM    LDA #$8D       ;Append a CR
  196.           JSR SENDBYTE
  197.           JSR XOR        ; and eof marker
  198.           JSR DISWARM
  199.           JSR CONNECT    ;Now close up
  200.           JSR DOCLOSE
  201. DOCR      JMP CROUT
  202.  
  203. DOCLOSE   LDY #CLOSE-OPEN
  204. SENDMSG   LDA OPEN,Y
  205.           BEQ SNDNAM
  206.           JSR COUT
  207.           INY
  208.           BNE SENDMSG
  209. SNDNAM    TAY
  210. SN        LDA FILENAME,Y
  211.           BEQ DOCR
  212.           CMP #","       ;Zero flag will be true
  213.           BEQ RET        ; only if have a comma.
  214. NEXT      JSR COUT
  215.           INY
  216.           BNE SN
  217. RET       RTS
  218.  
  219. OPEN      HEX 8D84
  220.           ASC "OPEN"
  221.           BRK
  222. CLOSE     HEX 8D84
  223.           ASC "CLOSE"
  224.           BRK
  225.  
  226. OPERATE   BIT DSKFLAG    ;Has DSK been invoked?
  227.           BMI INCOMPAT   ;Abort if so
  228.           LDA #4         ;Write opcode
  229.           STA OPCODE
  230.           LDA #1         ;One byte subcode
  231.           STA SUBOP
  232.           JSR FILEMGR
  233.           BCS ERR
  234.           RTS
  235.  
  236. INCOMPAT  LDA #8         ;Send I/O error in lieu
  237.           STA ERRCODE    ; of something better
  238. ERR       JSR DISWARM    ;Must disconnect ourselves or
  239.           JMP DOSERR     ; will print DOS error to disk
  240.  
  241.           ERR *-1/$3D0
  242.